import java.util.*;
/*给你一个长度为 n 的整数数组 nums 。对于 每个 下标 i（0 <= i < n），
定义对应的子数组 nums[start ... i]（start = max(0, i - nums[i])）。
返回为数组中每个下标定义的子数组中所有元素的总和。
子数组 是数组中的一个连续、非空 的元素序列。*/
public class Main {
    public static int seek(int[] nums) {
        // 复杂度n^2
    /*  int n = nums.length;
    int r = 0;
    for (int i = 0; i < n; i++) {
      int start = Math.max(0, i - nums[i]);
      for (int j = start; j <= i; j++) {
        r += nums[j];
      }
    }
    return r;*/
        // 复杂度n
        int n = nums.length;
        int[] res = new int[n + 1];
        int r = 0;
        for (int i = 0; i < n; i++) {
            res[i + 1] = res[i] + nums[i];
            r += res[i + 1] - res[Math.max(0, i - nums[i])];
        }
        return r;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = sc.nextInt();
        }
        int res = seek(nums);
        System.out.println(res);
    }
}